package com.cleverest.cleverestdiary.controller;

import com.cleverest.cleverestdiary.pojo.Article;
import com.cleverest.cleverestdiary.pojo.PageBean;
import com.cleverest.cleverestdiary.pojo.Result;
import com.cleverest.cleverestdiary.service.ArticleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/article")
public class ArticleController {
    //@GetMapping("/list")
    //public Result<String> list(/*@RequestHeader(name = "Authorization") String token, HttpServletResponse response*/) {
        /*//验证token
        try {
            Map<String, Object> claims = JwtUtil.parseToken(token);
            return Result.success("所有的文章");
        } catch (Exception e) {
            //http响应状态码为401
            response.setStatus(401);
            return Result.error("未登录");
        }*/
    //    return Result.success("所有的文章");
    // }
    @Autowired
    private ArticleService articleService;

    /**
     * 新增日记
     *
     * @param article 日记对象
     * @return 操作结果
     */
    @PostMapping
    public Result add(@RequestBody @Validated Article article) {
        articleService.add(article);
 /*       String title=article.getTitle();
        System.out.println(title);
        if (title == null || title.isEmpty()) {
            System.out.println("Title is empty!");}*/
        return Result.success();
    }

    /**
     * 获取文章列表
     *
     * @param pageNum    页码，用于分页查询
     * @param pageSize   每页数量，用于分页查询
     * @param categoryId 文章分类 ID，可选参数
     * @param state      文章状态，可选参数
     * @param keyword    搜索关键字，可选参数
     * @return 分页后的文章列表，使用 Result 类封装，其中包含 PageBean<Article> 对象
     */
    @GetMapping
    public Result<PageBean<Article>> list(
            Integer pageNum,
            Integer pageSize,
            @RequestParam(required = false) Integer categoryId,
            @RequestParam(required = false) String state,
            @RequestParam(required = false) String keyword
    ) {
        PageBean<Article> pb = articleService.list(pageNum, pageSize, categoryId, state, keyword);
        return Result.success(pb);
    }

    /**
     * 获取文章详情
     *
     * @param id 文章 ID，用于查询指定文章
     * @return 文章详情，使用 Result 类封装，其中包含 Article 对象
     */
    @GetMapping("/detail")
    public Result<Article> detail(Integer id) {
        Article a = articleService.findById(id);
        return Result.success(a);
    }

    /**
     * 更新文章信息
     *
     * @param article 文章对象，从请求体中获取，使用 @Validated(Article.Update.class) 进行更新时的数据验证
     * @return 操作结果，使用 Result 类封装
     */
    @PutMapping
    public Result update(@RequestBody @Validated(Article.Update.class) Article article) {
        articleService.update(article);
        return Result.success();
    }

    /**
     * 删除文章
     *
     * @param id 文章 ID，用于指定要删除的文章
     * @return 操作结果，使用 Result 类封装，如果文章不存在返回错误信息，否则返回成功信息
     */
    @DeleteMapping
    public Result delete(@RequestParam Integer id) {
        Article a = articleService.findById(id);
        if (a == null) {
            return Result.error("找不到这篇文章");
        } else {
            articleService.delete(id);
        }
        return Result.success();
    }

    /**
     * 根据关键字搜索文章
     *
     * @param keyword  搜索关键字
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 搜索结果
     */
    @GetMapping("/search")
    public Result<PageBean<Article>> searchByKeyword(
            @RequestParam String keyword,
            @RequestParam Integer pageNum,
            @RequestParam Integer pageSize
    ) {
        PageBean<Article> pb = articleService.searchByKeyword(pageNum, pageSize, keyword);
        return Result.success(pb);
    }
}
